package com.sinaapp.gavinzhang.GSpider.core;

import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.util.List;
import java.util.regex.Pattern;

/**
 * 这个抽象类是爬虫系统的爬取核心
 * 通过注入爬取网址，爬取规则，用户自定义页面处理类，待爬列表，已爬列表
 * 得以处理一个网址
 * 处理网址的步骤：
 * 1 检查网址的问题，主要有：网址错误，是否存在在已爬列表等
 * 2 对爬取到的页面进行预处理，去除或添加特定的结构，为减少不必要的网址提供便利，主要由用户提供
 * 3 处理爬取到的页面，对页面内的网址进行处理，首先检测是否符合爬取规则，其次检测是否存在在已爬列表，如果不在则加入到待爬列表
 * 4 在结束系统工作后，交由用户处理
 * @author gavin
 * @version 1.0.0
 * @see java.lang.Runnable
 */

public abstract class AbstractProcess  implements Runnable{
	/** 设置要抓取的网址*/
	public abstract void setWebUrl(String webUrl);
	
	/** 设置爬取规则*/
	public abstract void setPatterns(List<Pattern> patterns);
	
	/** 设置内容处理类*/
	public abstract void setPageProcessor(AbstractPageProcessor pp);
	
	/** 设置待爬列表*/
	public abstract void setPendingUrlList(AbstractGWebUrlList list);
	
	/** 设置已爬列表*/
	public abstract void setVisitedUrlList(AbstractGWebUrlList list);
	
	/** 对网址进行检查，包括是否已经爬过，网页状态是不是404等*/
	public abstract void websiteCheckAndDispose(String webUrl);
	
	/** 对得到的Document对象进行预处理*/
	public abstract void preWebContent(Document html);
	
	/** 对预处理后的Document对象，取得其符合爬取规则的webUrl*/
	public abstract void disposeWebContent(Elements html);
	
	/** 处理过后进行结束操作*/
	public abstract void afterWebContent(Document html);

	
}
